package api_models

import (
	"longmen/server/pkg/db/mysql/models/models_live"
	"longmen/server/pkg/db/mysql/models/models_sports"
	pt "longmen/server/pkg/protobuf"
)

type GetMatchSortedByDateResp struct {
	MatchDate string   `json:"match_date" example:"2022-01-02"` //比赛数组所在的日期  例:"*月*日
	Match     []*Match `json:"get_user_reservation" `           //当前日期的赛事
}

type Match struct {
	MatchID         int      `json:"match_id"`                //int(10)
	MatchEventTitle string   `json:"match_event_title"`       //varchar(255) COMMENT '联赛名称'
	MatchDate       string   `json:"match_date"`              //int(11) COMMENT '开赛日期' 2022-01-16
	MatchTime       string   `json:"match_time"`              //int(11) COMMENT '开赛具体时间'
	HomeTeamName    string   `json:"home_team_name"`          //varchar(255) COMMENT '主队名称'
	HomeTeamLogo    string   `json:"home_team_logo"`          //varchar(255) COMMENT '主队图标'
	HomeScore       int      `json:"home_score"`              //主队当前比分
	AwayTeamName    string   `json:"away_team_name"`          //varchar(255) COMMENT '客队名称'
	AwayTeamLogo    string   `json:"away_team_logo"`          //varchar(255) COMMENT '客队图标'
	AwayScore       int      `json:"away_score"`              //客队当前比分
	AnchorAvatar    []string `json:"anchor_avatar"`           //预约直播的主播头像
	AnchorId        int      `json:"anchor_id"`               //正在直播中最热的主播Id(房间号) 如果没有主播解说此场比赛,则为0
	MatchStatus     string   `json:"match_status"`            //比赛状态
	ISReservation   int64    `gorm:"-" json:"is_reservation"` //是否被预约 0-未预约,1-已预约
}
type GetRecommendMatches4CrawlerReq struct {
	SportId int `json:"sport_id"  example:"0"` // 类型:0-全部;1-足球,2-篮球
}

type SuggestedMatchesResponse struct {
	Starting []models_sports.MatchesSuggest `json:"staring"`
	Pending  []models_sports.MatchesSuggest `json:"pending"`
	Finished []models_sports.MatchesSuggest `protobuf:"bytes,3,rep,name=finished,proto3" json:"finished"`
}

type MatchSimpleDataResponse struct {
	HomeName        string `json:"home_name"` //主队名
	AwayName        string `json:"away_name"` //客队名
	Id              int64  `json:"id"`
	Time            int64  `json:"time"`         //int(10) DEFAULT '0' COMMENT '比赛时间'
	KickoffTime     int64  `json:"kickoff_time"` //int(10) DEFAULT '0' COMMENT '开球时间'
	HomeId          int64  `json:"home_id"`      //int(11) DEFAULT '0' COMMENT '主队id'
	AwayId          int64  `json:"away_id"`      //int(11) DEFAULT '0' COMMENT '客队id'
	HomeScore       int    `json:"home_score"`   //int(10) DEFAULT '0' COMMENT '主队常规时间比分(含补时)'
	AwayScore       int    `json:"away_score"`   //int(10) DEFAULT '0' COMMENT '客队常规时间比分(含补时)'
	HomeLogo        string `json:"home_logo"`
	AwayLogo        string `json:"away_logo"`
	Status          string `json:"status"`
	CompetitionName string `json:"competition_name"`
}
type GetMatch4CrawlerReq struct {
	SportId     uint32 `json:"sport_id" example:"0"`       //赛事类型,0-所有类型的赛事,1-足球，2-篮球
	IsLive      uint32 `json:"is_live" example:"0"`        //是否正在直播,0-未直播,1-直播中(热门)
	MatchStatus uint32 `json:"match_status" example:"0" `  //比赛状态,0-所有(默认),1-仅进行中的赛事,2-仅未开赛的赛事,3-仅完场的赛事,
	Competation string `json:"competation" example:"NBA" ` //联赛名,不填显示所有联赛的赛事,暂定单选(只能填一种赛事),例:"NBA"或"印桑杯"等
	Date        string `json:"date" example:"2022-02-02"`
	IsFlag      uint32 `json:"is_flag" example:"1"` // 1所有正常, 2重要赛事
	PageParam
}

type GetReservedMatch4CrawlerReq struct {
	PageParam
}

type GetMatch4CrawlerResp struct {
	Count           int64            `json:"count"`            //总数
	SoccerCount     int64            `json:"soccer_count"`     //足球总数
	BasketballCount int64            `json:"basketball_count"` //篮球总数
	Match           []*Match4Crawler `json:"match"`            //赛事
}

type GetReservedMatch4CrawlerResp struct {
	Date  string                   `json:"date" example:"2022-02-02"` //日期
	Match []*ReservedMatch4Crawler `json:"match"`                     //赛事
}

type Match4Crawler struct {
	MatchId         int            `json:"match_id"`          //赛事ID
	MatchEventTitle string         `json:"match_event_title"` //联赛名
	MatchTime       int64          `json:"match_time"`        //开赛具体时间
	HomeTeamName    string         `json:"home_team_name"`    //主队名称
	HomeTeamLogo    string         `json:"home_team_logo"`    //主队图标
	HomeScore       int            `json:"home_score"`        //主队当前比分
	AwayTeamName    string         `json:"away_team_name"`    //客队名称
	AwayTeamLogo    string         `json:"away_team_logo"`    //客队图标
	AwayScore       int            `json:"away_score"`        //客队当前比分
	MatchStatus     int            `json:"match_status"`      //比赛状态, 1-进行,2-未开赛,3-完场
	IsReserved      bool           `json:"is_reserved"`       //是否被预约
	Weights         int            `json:"weights"`
	SportId         uint8          `json:"sport_id" ` //赛事类型，1-足球，2-篮球
	Reservation     []*Reservation `json:"reservation"`
}

type ReservedMatch4Crawler struct {
	MatchId         int            `json:"match_id"`          //赛事ID
	MatchEventTitle string         `json:"match_event_title"` //联赛名
	MatchTime       int64          `json:"match_time"`        //开赛具体时间
	HomeTeamName    string         `json:"home_team_name"`    //主队名称
	HomeTeamLogo    string         `json:"home_team_logo"`    //主队图标
	HomeScore       int            `json:"home_score"`        //主队当前比分
	AwayTeamName    string         `json:"away_team_name"`    //客队名称
	AwayTeamLogo    string         `json:"away_team_logo"`    //客队图标
	AwayScore       int            `json:"away_score"`        //客队当前比分
	MatchStatus     int            `json:"match_status"`      //比赛状态, 1-进行,2-未开赛,3-完场
	IsReserved      bool           `json:"is_reserved"`       //是否被预约
	Reservation     []*Reservation `json:"reservation"`
}

type Reservation struct {
	AnchorId     uint   `json:"anchor_id"`     //主播Id
	AnchorAvatar string `json:"anchor_avatar"` //主播头像
}

type GetCompetation4CrawlerReq struct {
	Date string `json:"date" example:"2022-02-02"`
	Type uint8  `json:"type" example:"1" validate:"required"` //赛事类型1-足球,2-篮球
}

type GetCompetation4CrawlerResp struct {
	Comp string `json:"comp" example:"印桑杯"` //联赛名
}

type GetSportRecMatchReq struct {
	PageParam
	Date string `json:"date"`
	Uid  int    `json:"uid"`
}

type SportMatchInfo struct {
	models_sports.SportMatch
	Matchevent   *models_sports.SportMatchevent `json:"matchevent"`    //联赛信息
	Awayteam     *models_sports.SportTeam       `json:"awayteam"`      //客队球队信息
	Hometeam     *models_sports.SportTeam       `json:"hometeam"`      //主队球队信息
	Attented     int                            `json:"attented"`      //是否收藏
	InProgress   int                            `json:"in_progress"`   //0:异常 1:進行中比賽 2:未開始 8:完賽
	MatchResult  string                         `json:"match_result"`  //赛果
	MatchAnchors []*Anchor                      `json:"match_anchors"` //正在直播此场赛事的主播信息
}

type GetSportDateMatchReq struct {
	PageParam
	Date      string            `json:"date"`      //比賽日期, 沒傳就是當天數據
	Uid       int               `json:"uid"`       //會員id,用於收藏
	HaveLive  int               `json:"have_live"` //是否有直播1无 2有
	Events    map[string]string `json:"events"`    //賽事, id以逗點隔開 {"football":"123,456,789"}
	Countrys  map[string]string `json:"countrys"`  //國家, id以逗點隔開 {"football":"123,456,789"}
	Categorys map[string]string `json:"categorys"` //地區, id以逗點隔開 {"football":"2,3,4"}
	Keyword   string            `json:"keyword"`   //關鍵字
}

type GetSportDateMatchResp struct {
	Matchs     []*SportMatchInfo `json:"matchs"`
	TotalCount int64             `json:"total_count"`
}

type GetPullUrlReq struct {
	Type        string `json:"type" validate:"required" example:"football"` //football,basket,tennis
	MatchId     int64  `json:"match_id" validate:"required"`                //比賽id
	RequestTime int64  `json:"request_time" validate:"required"`            //接口請求時間戳(s)
	Sign        string `json:"sign"`                                        //不用傳
}

type GetPullUrlResp struct {
	Pushurl1 string `json:"pushurl1"` // 普清流地址
	Pushurl2 string `json:"pushurl2"` // 中文高清流地址，可能为空
	Pushurl3 string `json:"pushurl3"` // 英文高清流地址，可能为空
}

type GetSportMatchEventResp struct {
	List []*models_sports.SportMatchevent `json:"list"`
}

type AttentSportMatchReq struct {
	SportType string `json:"sport_type" validate:"required"` //football,basket,tennis
	Matchid   int    `json:"matchid" validate:"required"`
	Type      int    `json:"type"` //1-收藏 0-取消收藏
}

type GetSportAreaResp struct {
	List []*models_sports.SportArea `json:"list"`
}

type GetSportCountryResp struct {
	List []*models_sports.SportCountry `json:"list"`
}

type GetSportEventByDateReq struct {
	Date      string `json:"date"`
	SportType string `json:"sport_type"` //篮球 足球 网球
}

type GetSportEventByDateResp struct {
	Events []*SportEventAndMatch `json:"events"`
}

type SportEventAndMatch struct {
	models_sports.SportMatchevent
	Matchs []*SportMatchAndTeam `json:"matchs"`
}

type SportMatchAndTeam struct {
	models_sports.SportMatch
	Awayteam *models_sports.SportTeam `json:"awayteam"`
	Hometeam *models_sports.SportTeam `json:"hometeam"`
}

type GetSportMatchReq struct {
	SportType string `json:"sport_type" validate:"required"` //football,basket,tennis
	Matchid   int    `json:"matchid"`                        //赛事ID
}

type GetMatchEventsReq struct {
	Type string `json:"type" validate:"required" example:"football"` //football,basket,tennis
}

type GetMatchReq struct {
	SportType     string `json:"sport_type" validate:"required" example:"football"` //football,basket,tennis,不传的话目前同时显示足球和蓝球
	Date          string `json:"date" validate:"required" example:"2022-02-02"`
	CompetitionID int    `json:"competition_id" validate:"required"` // 联赛id,默认取所有请传0
	INLive        int    `json:"in_live" validate:"required"`        // 是否直播,默认取所有请传0,传1取直播中
	UserID        int    `json:"user_id" validate:"required"`        // 登录用户请传入用户ID，未登录状态请传0,用于判断用户是否预约
	Page          int    `json:"page"`                               //分页，默认起始页请传1
}
type GetMatchIosReq struct {
	UserID        int    `json:"user_id" validate:"required"`        // 登录用户请传入用户ID，未登录状态请传0,用于判断用户是否预约
	CompetitionID int    `json:"competition_id" validate:"required"` // 联赛id,默认取所有请传0
	SportType     string `json:"sport_type" example:"football"`      //	football,basket,不传默认所有体育类型,
	INLive        int    `json:"in_live" validate:"required"`        // 正在直播的赛事,默认取所有请传0,传1取直播中
	PageParam
}

type MatchCard struct {
	ID            int   `json:"id"`
	CompetitionID int   `json:"competition_id"` // 联赛event id
	SeasonID      int   `json:"seasonID"`       // 赛季id
	Status        int   `json:"status"`         // 比赛进行状态
	Time          int64 `json:"time"`           // 开赛时间
	HomeID        int   `json:"home_id"`        // 主队id
	HomeScore     int   `json:"home_score"`     // 主队当前比分
	AwayID        int   `json:"away_id"`        // 客队id
	AwayScore     int   `json:"away_score"`     // 客队当前比分

	SportType string `json:"sport_type"` // 体育类型 basket football

	HomeTeamLogo string `json:"home_team_logo"` // 主队队标
	// 队名
	HomeTeamNameEN  string `json:"home_team_name_en"`
	HomeTeamNameZH  string `json:"home_team_name_zh"`
	HomeTeamNameZHT string `json:"home_team_name_zht"`

	AwayTeamLogo    string `json:"away_team_logo"`
	AwayTeamNameEN  string `json:"away_team_name_en"`
	AwayTeamNameZH  string `json:"away_team_name_zh"`
	AwayTeamNameZHT string `json:"away_team_name_zht"`

	// 赛事
	EventLogo         string `json:"event_logo"` // 赛事图标
	EventNameEN       string `json:"event_name_en"`
	EventNameZH       string `json:"event_name_zh"`
	EventNameZHT      string `json:"event_name_zht"`
	EventShortNameEN  string `json:"event_short_name_en"`
	EventShortNameZH  string `json:"event_short_name_zh"`
	EventShortNameZHT string `json:"event_short_name_zht"`

	// 直播信息
	// Lives []models.Live `gorm:"-" json:"lives"`
	Lives []struct {
		AnchorAvatar string `json:"anchor_avatar"` // 主播头像
		models_live.Live
	} `gorm:"-" json:"lives"`

	// 预约信息
	Reservations []struct {
		UserID       int    `json:"user_id"`       //int(10)
		UserType     int    `json:"user_type"`     //tinyint(1) DEFAULT '0' COMMENT '0: 普通用户, 1: 主播用户'
		UserNickname string `json:"user_nickname"` //varchar(255) COMMENT '用户昵称'
		UserAvatar   string `json:"user_avatar"`   //varchar(255) COMMENT '用户头像'
	} `gorm:"-" json:"reservations"`
	ISReservation int64 `gorm:"-" json:"is_reservation"`
}
type MatchCard4Crawler struct {
	ID                int    `json:"id"`
	CompetitionID     int    `json:"competition_id"`    // 联赛event id
	SeasonID          int    `json:"seasonID"`          // 赛季id
	Status            int    `json:"status"`            // 1进行中 2未开赛 3已结束
	Time              int64  `json:"time"`              // 开赛时间
	HomeID            int    `json:"home_id"`           // 主队id
	HomeScore         int    `json:"home_score"`        // 主队当前比分
	AwayID            int    `json:"away_id"`           // 客队id
	AwayScore         int    `json:"away_score"`        // 客队当前比分
	SportType         string `json:"sport_type"`        // 体育类型 basket football
	HomeTeamLogo      string `json:"home_team_logo"`    // 主队队标
	HomeTeamNameEN    string `json:"home_team_name_en"` // 队名
	HomeTeamNameZH    string `json:"home_team_name_zh"`
	HomeTeamNameZHT   string `json:"home_team_name_zht"`
	AwayTeamLogo      string `json:"away_team_logo"`
	AwayTeamNameEN    string `json:"away_team_name_en"`
	AwayTeamNameZH    string `json:"away_team_name_zh"`
	AwayTeamNameZHT   string `json:"away_team_name_zht"` // 赛事
	EventLogo         string `json:"event_logo"`         // 赛事图标
	EventNameEN       string `json:"event_name_en"`
	EventNameZH       string `json:"event_name_zh"`
	EventNameZHT      string `json:"event_name_zht"`
	EventShortNameEN  string `json:"event_short_name_en"`
	EventShortNameZH  string `json:"event_short_name_zh"`
	EventShortNameZHT string `json:"event_short_name_zht"`
	MatchId           int    `json:"match_id"`
	SportId           int    `json:"sport_id"`
	AnchorAvatars     string `json:"anchor_avatars"` // 主播头像url字符串 多个以,分隔  gorm:"-"
	AnchorIds         string `json:"anchor_ids"`     // ids 字符串 多个以,分隔 gorm:"-"
	/*Lives             []struct { // 直播信息
		AnchorAvatar string `json:"anchor_avatar"` // 主播头像
		models.Live
	} `gorm:"-" json:"lives"`*/
	// 预约信息
	Reservations []struct {
		UserID       int    `json:"user_id"`       //int(10)
		UserType     int    `json:"user_type"`     //tinyint(1) DEFAULT '0' COMMENT '0: 普通用户, 1: 主播用户'
		UserNickname string `json:"user_nickname"` //varchar(255) COMMENT '用户昵称'
		UserAvatar   string `json:"user_avatar"`   //varchar(255) COMMENT '用户头像'
	} `gorm:"-" json:"reservations"`
	ISReservation     uint32 `gorm:"-" json:"is_reservation"`
	MatchStatus       uint32 `json:"match_status"`        // 1进行中 2未开赛 3已结束
	MatchDetailStatus string `json:"match_detail_status"` // 上半场,下半场,
	TimePlayed        uint32 `json:"time_played"`         // 比赛已经进行时间
}

// 赛程页
type EventMatch struct {
	Total int64                `json:"total"`
	Match []*pt.MatchCardsInfo `json:"match"`
}

type EventMatchTemp struct {
	Total int64        `json:"total"`
	Match []*MatchCard `json:"match"`
}

type ReserveOrCancelReserveMatchReq struct {
	MatchId int `json:"match_id"` //赛事ID
}

type ReserveOrCancelReserveMatchResp struct {
	IsSuccess bool `json:"is_success"` //是否成功
}

type GetAnchorReservation struct {
	MatchId      uint   `json:"match_id"`      //比赛ID
	AnchorId     uint   `json:"anchor_id"`     //主播ID
	AnchorAvatar string `json:"anchor_avatar"` //主播头像
}

type GetAnchorReservations struct {
	MatchId       uint   `json:"match_id"`       //比赛ID
	AnchorIds     string `json:"anchor_ids"`     //主播IDs
	AnchorAvatars string `json:"anchor_avatars"` //主播头像s
}

type SuggestArgs struct {
	SportId   int
	Status    int
	StartUnix int64
	EndUnix   int64
	Order     string
}

//解析ES数据
type EsMatchTempSchedule struct {
	Id                int    `json:"id"`
	MatchId           int    `json:"match_id"`
	MatchTime         int64  `json:"match_time"`
	SportId           int    `json:"sport_id"`
	Comp              string `json:"comp"`
	CompShortZh       string `json:"comp_short_zh"`
	CompLogo          string `json:"comp_logo"`
	Home              string `json:"home"`
	HomeLogo          string `json:"home_logo"`
	Away              string `json:"away"`
	AwayLogo          string `json:"away_logo"`
	HomeScore         uint32 `json:"home_score"`
	AwayScore         uint32 `json:"away_score"`
	TimePlayed        uint32 `json:"time_played"`
	MatchStatus       uint32 `json:"match_status"`
	MatchDetailStatus string `json:"match_detail_status"`
	RawMatchStatus    uint32 `json:"raw_match_status"`
	CompShortEn       string `json:"comp_short_en"`
	AwayEn            string `json:"away_en"`
	HomeEn            string `json:"home_en"`
}
